// 这个文件帮我们打包packages下的模块，最终打包出js文件

// node scripts/dev.js reactivity -f esm
// node dev.js (要打包的名字 -f 打包的格式) === argv.slice(2)

import minimist from "minimist";
import { createRequire, SourceMap } from "module";
import { resolve, dirname } from "path";
import { fileURLToPath } from "url";
import esbuild from "esbuild"

// 获取文件的绝对路径
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
 
// node中的命令函数通过process来获取process.agav
const args = minimist(process.argv.slice(2));

const target = args._[0] || "reactivity"; // 打包哪个项目
const format = args.f || "iife"; // 打包后模块化规范

// 获取require方法
const require = createRequire(import.meta.url);

// 入口文件 根据命令行提供的路径来进行解析
const entry = resolve(__dirname, `../packages/${target}/src/index.ts`)
const pkg = resolve(`../packages/${target}/package.json`)

// 根据需要进行打包
esbuild.context({
    entryPoints: [entry], // 入口文件
    outfile: resolve(__dirname, `../packages/${target}/dist/${target}.js`), // 出口
    bundle: true, // reactivity -> shared 会打包到一起
    platform: "browser", // 打包后给浏览器使用
    sourcemap: true, // 可以调试源代码
    format, // cjs esm iife
    globalName: pkg.buildOptions?.name
}).then((ctx) => {
    console.log('start dev');

    return ctx.watch();
})